﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data;

namespace test1
{
    class Program
    {
        static void Main(string[] args)
        {
            //1.声明两个变量：int n1 = 10, n2 = 20; 
            //要求将两个变量交换，最后输出n1为20，n2为10。
            int n1 = 10, n2 = 20;
            int tmp = n1;
            n1 = n2;
            n2 = tmp;
            Console.WriteLine("n1={0},n2={1}", n1, n2);
            Console.ReadKey();

            //不使用第三个变量完成交换
            n1 = n1 + n2;
            n2 = n1 - n2;
            n1 = n1 - n2;
            Console.WriteLine("n1={0},n2={1}", n1, n2);
            Console.ReadKey();

            /*2.用方法来实现：将上题封装一个方法来做，方法有两个参数n1,n2，在方法中将n1和n2交换
             * （提示：ref）。
             */
            swap(ref n1, ref n2);
            Console.WriteLine("n1={0},n2={1}", n1, n2);
            Console.ReadKey();

            /*3.用方法实现：接收两个int类型的参数，在该方法中计算这两个参数的加、减、乘、除运算的结果，最后将所有结果返回（提示：out）。*/
            int sum, dec, mul;
            double div;
            calculate(n1, n2, out sum, out dec, out mul, out div);
            Console.WriteLine(sum);
            Console.WriteLine(dec);
            Console.WriteLine(mul);
            Console.WriteLine(div);

            /*4.用方法来实现：计算任意多个数间的最大值（提示：params）。
             */

            int max;
            max = GetMax(24, 73, 96, 47);
            Console.WriteLine("max={0}", max);
            Console.ReadKey();

            /*5.求斐波那契数列前20项的和。*/
            int fbsum;
            fbsum = getfbsum(20);
            Console.WriteLine(fbsum);

            /*6.打印杨辉三角形（10行）。*/
            int n = 10;
            yanghuisanjiao(n);

            /*7.对整型数组{20,16,78,61,12,99,57,34,8}进行冒泡排序，要求数据由小到大排列。*/
            int[] arr = { 20, 16, 78, 61, 12, 99, 57, 34, 8 };
            maopao(arr);

            /*8.有如下字符串："患者：“大夫，我咳嗽得很重。”     大夫：“你多大年记？”    
             * 患者：“七十五岁。”     大夫：“二十岁咳嗽吗”患者：“不咳嗽。”     
             * 大夫：“四十岁时咳嗽吗？”     患者：“也不咳嗽。”     
             * 大夫：“那现在不咳嗽，还要等到什么时咳嗽？”"。
             * 需求：请统计出该字符中“咳嗽”二字的出现次数，以及每次“咳嗽”出现的索引位置。*/
            string str = "患者：“大夫，我咳嗽得很重。” " +
                " 大夫：“你多大年记？”  " +
                " 患者：“七十五岁。” " +
                " 大夫：“二十岁咳嗽吗”" +
                "患者：“不咳嗽。”    " +
                " 大夫：“四十岁时咳嗽吗？”     " +
                "患者：“也不咳嗽。”     " +
                "大夫：“那现在不咳嗽，还要等到什么时咳嗽？”";
            Cough(str);

            /*9.从日期字符串"2020年10月1日"中把年月日的数据分别取出来，打印到控制台。*/
            string msg = "2020年10月1日";
            getdate(msg);

            /*10.将字符串"  Hello   World  !   你好    世界 ！ " 两端的空格去掉，并且将其中的连续空格都替换成一个空格。*/
            string str1 = "  hello      world,你  好 世界   !    ";
            delspace(str1);

        }

        /* private static int Max(int n1, int n2)
         {
             if (n1 > n2)
             {
                 return n1;
             }
             else {
                 return n2;
             }
         }*/
        private static int GetMax(params int[] num)
        {
            int max = num[0];
            for (int i = 1; i < num.Length; i++)
            {
                if (num[i] > num[i - 1])
                {
                    max = num[i];
                }
            }
            return max;
        }
        private static void calculate(int n1, int n2, out int sum, out int dec, out int mul, out double div)
        {
            sum = n1 + n2;
            dec = n1 - n2;
            mul = n1 * n2;
            div = n1 / n2;
        }
        private static void swap(ref int n1, ref int n2)
        {
            n1 = n1 + n2;
            n2 = n1 - n2;
            n1 = n1 - n2;
        }

        private static int getfbsum(int n)
        {
            int n1 = 0, sum = 0;
            static int fbarray(int n1)
            {
                if (n1 == 1 || n1 == 2)
                {
                    return 1;
                }
                else
                    return fbarray(n1 - 2) + fbarray(n1 - 1);
            }
            for (n1 = 1; n1 < n; n1++)
            {
                sum = sum + fbarray(n1);
            }
            return sum;
        }
        static void yanghuisanjiao(int n)
        {
            int length = n;
            int[][] a = new int[length][];
            for (int i = 0; i < a.Length; i++)
                a[i] = new int[i + 1];
            for (int j = 0; j < a.Length; j++)
            {
                a[j][0] = 1;
                a[j][j] = 1;
                for (int m = 1; m < a[j].Length - 1; m++)
                    a[j][m] = a[j - 1][m - 1] + a[j - 1][m];
            }
            for (int i = 0; i < a.Length; i++)
            {
                for (int k = 0; k < length - i; k++)
                    Console.Write(" ");
                for (int j = 0; j < a[i].Length; j++)
                    Console.Write("{0} ", a[i][j]);
                Console.Write("\n");
            }
            Console.Read();
        }

        static void maopao(int[] arr)
        {
            int temp = 0;
            for (int i = 0; i < arr.Length - 1; i++)
            {
                for (int j = 0; j < arr.Length - 1 - i; j++)
                {
                    if (arr[j] > arr[j + 1])
                    {
                        temp = arr[j + 1];
                        arr[j + 1] = arr[j];
                        arr[j] = temp;
                    }
                }
            }
            Console.WriteLine("排序后的数组：");
            foreach (int item in arr)
            {
                Console.Write(item + " ");
            }
            Console.WriteLine();
            Console.ReadKey();
        }

        static void Cough(string str)
        {
            int n = 0;
            int nStartIndex = 0;
            while (true)
            {
                int index = str.IndexOf("咳嗽", nStartIndex);
                if (-1 == index)
                {
                    break;
                }
                else
                {
                    n++;
                    nStartIndex = index + 2;
                    Console.WriteLine("第{0}次咳嗽出现的位置是{1}", n, index);
                }
            }
        }
        static void getdate(string msg)
        {
            string[] parts = msg.Split(new char[] { '年', '月', '日' }, StringSplitOptions.RemoveEmptyEntries);
            foreach (string item in parts)
            {
                Console.WriteLine(item);
            }
            Console.ReadKey();
        }

        static void delspace(string str)
          {
             str= str.Trim();
              //以空格切割
            string[] strArray = str.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
             //以空格连接
            string newStr = string.Join(" ", strArray);
             Console.WriteLine(newStr);
             Console.ReadKey();
         }
}
}
